# 备份保底小时数：
'''
这里的代码对基础获取到的pvsyst仿真结果进行了数据处理，并把所有的省市的结果并在了一张大表里，内容包括：
* 逐月的区县平均发电小时数
* 市的面积加权小时数
'''
import numpy as np
import pandas as pd
import os
import warnings
warnings.filterwarnings("ignore")


# 把所有的保底小时数的数据合并到一个表上，颗粒度到区/县：
def cal_and_get_generation(df):
    # 加一个房型的标签：
    if df['Tilt1'].unique()==0 and df['Tilt2'].unique()==0:
        df['房型'] = '阳光棚'
    elif df['Tilt1'].unique()=='水平面':
        df['房型'] = '阳光棚'
    elif df['Tilt1'].unique()==10 and df['Tilt2'].unique()==10:
        df['房型'] = '10度阳光棚'
    elif df['Tilt1'].unique()==27 and df['Tilt2'].unique()==27:
        df['房型'] = '双坡房'
    elif df['Tilt1'].unique()==15 and pd.isna(df['Tilt2'].unique()):
        df['房型'] = '标准房15度'
    elif df['Tilt1'].unique()==10 and pd.isna(df['Tilt2'].unique()):
        df['房型'] = '标准房10度'

    else:
        raise ValueError('倾角有错')

    # 增加一个逻辑: '无县级'字段会被认为是一块处理的数据块，应该修改：
    df.loc[df['区/县'] == '无县级', '区/县'] = df['市']

    for i in range(1,13):
        df[f'{i}月_发电小时数'] = df[f'Month{i}_GlobInc']*0.87
        df[f'{i}月区县平均发电小时数'] = df.groupby('区/县')[f'{i}月_发电小时数'].transform('mean')
    df['年发电小时数'] = df['year_GlobInc']*0.87
    df['年发电小时数区县平均值'] = df.groupby('区/县')['年发电小时数'].transform('mean')

    # 步骤2：创建一个临时DataFrame用于计算市内区县的加权平均值
    temp_df = df.groupby(['市', '区/县']).agg({
        '年发电小时数区县平均值': 'first',
        '面积': 'first'
    }).reset_index()

    # 计算市内区县的加权平均值
    def weighted_average(group):
        return (group['年发电小时数区县平均值'] * group['面积']).sum() / group['面积'].sum()

    weighted_avg_by_city = temp_df.groupby('市').apply(weighted_average).reset_index(name='市加权平均年发电小时数')

    # 步骤3：将市加权平均年发电小时数合并回原DataFrame
    df = df.merge(weighted_avg_by_city, on='市', how='left')

    # 步骤4： 保留需要的列
    save_columns_name = ['省', '市', '区/县', '房型', '市加权平均年发电小时数'] + [f'{i}月区县平均发电小时数' for i in range(1,13)]
    res_select = df[save_columns_name]
    for i in range(1,13):
        res_select = res_select.rename(columns={f'{i}月区县平均发电小时数':f'{i}月_发电小时数'})

    # 步骤5： 每个区/县,房型保留唯一值：
    # 根据四列组合去重，保留每组第一次出现的行
    res_unique = res_select.drop_duplicates(subset=['省', '市', '区/县', '房型'], keep='first')

    return res_unique

filepath = r'D:\work_files\projcet\generation_hour\phour_easy_report\PVreport\summery\standard\统一备份'
# test:
# filepath = r'D:\work_files\projcet\generation_hour\phour_easy_report\PVreport\summery\standard\统一备份\test'
results = []
for file in os.listdir(filepath):
    if file.endswith('.xlsx'):# and file.startswith('运维需要的-标准房15度'):
        df = pd.read_excel(os.path.join(filepath, file))
        res = cal_and_get_generation(df)
        results.append(res)
results_df = pd.concat(results, axis=0)
# test:
# results_df.to_excel(os.path.join(filepath, 'res\\test_sortup.xlsx'), index=False)
results_df.to_excel(os.path.join(filepath, 'res\统一备份_保底小时数.xlsx'), index=False)
